/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.ws.modelo;

import java.util.List;
import javax.persistence.*;

@Entity
@NamedQueries({
    @NamedQuery(name = "Modulo.listar", query = "SELECT m FROM Modulo m"),
    @NamedQuery(name = "Modulo.consultaPorNome", query = "SELECT m FROM Modulo m WHERE m.nome = :nome"),
    @NamedQuery(name = "Modulo.consultaPorNomeCodigo",query="SELECT m FROM Modulo m WHERE m.nome = :nome AND m.codigo = :codigo"),

})
public class Modulo {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer codigo;
    private String nome;
    @ManyToMany(mappedBy = "modulos",fetch=FetchType.LAZY)
    private List<Grupo> grupos;

    @ManyToMany(cascade = {CascadeType.MERGE},fetch=FetchType.LAZY)
    @JoinTable(name = "modulo_funcionalidade", joinColumns = {
        @JoinColumn(name = "modulocodigo")}, inverseJoinColumns = {
        @JoinColumn(name = "funcionalidadecodigo")})
    private List<Funcionalidade> funcionalidades;

    @OneToMany(fetch=FetchType.LAZY,mappedBy="modulo",cascade={CascadeType.ALL})
    private List<Pagina> paginas;

    public List<Pagina> getPaginas() {
        return paginas;
    }

    public void setPaginas(List<Pagina> paginas) {
        this.paginas = paginas;
    }

    public List<Grupo> getGrupos() {
        return grupos;
    }

    public void setGrupos(List<Grupo> grupos) {
        this.grupos = grupos;
    }


    public List<Funcionalidade> getFuncionalidades() {
        return funcionalidades;
    }

    public void setFuncionalidades(List<Funcionalidade> funcionalidades) {
        this.funcionalidades = funcionalidades;
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codigo != null ? codigo.hashCode() : 0);
        return hash;
    }

     @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Modulo)) {
            return false;
        }
        Modulo other = (Modulo) object;
        if ((this.codigo == null && other.codigo != null) || (this.codigo != null && !this.codigo.equals(other.codigo))) {
            return false;
        }
        return true;
    }



}
